package com.ruoyi.web.controller.system;

import org.springframework.beans.factory.ListableBeanFactory;

import javax.validation.constraints.Negative;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;


//查询
public class MySQLDemo {

//    // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
//    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//    static final String DB_URL = "jdbc:mysql://localhost:3306/jw";

    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/jw?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";


    // 数据库的用户名与密码，需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        //存放所有表名
        List<String> tableNames = new ArrayList<>();
        //存放当前表的字段
        List<String> fields = new ArrayList<>();
        //存放当前表的字段类型
        List<String> fieldstype = new ArrayList<>();
        try {
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();

            //获取数据库的元数据
            DatabaseMetaData dbMetaData = conn.getMetaData();
            //从元数据中获取到所有的表名
            ResultSet rs = dbMetaData.getTables(null, null, null, new String[]{"TABLE"});
//
//                while(rs.next()) {
//                    if (Objects.equals(rs.getString("TABLE_CAT"), "jw")) {
//                        System.out.println("表名: " + rs.getString("TABLE_NAME"));
//                        System.out.println("表类型: " + rs.getString("TABLE_TYPE"));
//                        System.out.println("表所属数据库: " + rs.getString("TABLE_CAT"));
//                        System.out.println("表所属用户名: " + rs.getString("TABLE_SCHEM"));
//                        System.out.println("表备注: " + rs.getString("REMARKS"));
//                        tableNames.add(rs.getString("TABLE_NAME"));
//                    }
//                }
            //查询每个表的字段

            String sql = "select * from  daba_table" ;
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rstable = ps.executeQuery();
            //结果集元数据
            ResultSetMetaData meta = rstable.getMetaData();
            //表列数量
            int columeCount = meta.getColumnCount();
            for (int i = 1; i <= columeCount; i++) {
                fields.add(meta.getColumnName(i));
                fieldstype.add(meta.getColumnTypeName(i));

            }
            System.out.println("表" + "jw" + "字段: " + fields);
            System.out.println("表" + "jw" + "字段类型: " + fieldstype);
            fields.clear();


            //存放所有数据库
            List<String> databases = new ArrayList<>();
//            String sql;
//            sql = "SHOW DATABASES";
//            ResultSet ls = stmt.executeQuery(sql);
//            // 展开结果集数据库
//            while (ls.next()) {
//                // 通过字段检索
//                databases.add(ls.getString("database"));
//            }
            // 完成后关闭
          //  ls.close();
//            stmt.close();
//            conn.close();


//            ResultSet rs = stmt.executeQuery(sql);
//
//            // 展开结果集数据库
//            while(rs.next()){
//                // 通过字段检索
//                String name = rs.getString("database");
//
//                // 输出数据
//                System.out.print("站点名称: " + name);
//                System.out.print("\n");
//            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}